#include <iostream>
using namespace std;

const int MAX_N = 100000 + 10;
int num[MAX_N]; // num[i]表示编号为 i 的节点的数值
int nxt[MAX_N]; // nxt[i]表示编号为 i 的节点的下一个数字的编号
int cnt = 0;    // 表示目前插入到第几个数字了
int m;
int head_index = 0; // 虚拟的头节点的编号/索引

// 新建一个节点，令它的值为value,并且返回它的编号
int new_node(int value)
{
    cnt++;
    num[cnt] = value;
    return cnt;
}

// 将编号为idx2的节点插入到idx1后面
void insert(int idx1, int idx2)
{
    nxt[idx2] = nxt[idx1];
    nxt[idx1] = idx2;
}

// 删除idx后面的节点
void remove(int idx)
{
    if (nxt[idx] == -1)
        return;
    nxt[idx] = nxt[nxt[idx]];
}

int main()
{
    cin >> m;
    nxt[head_index] = -1;
    char operation;
    while (m--)
    {
        cin >> operation;
        switch (operation)
        {
        case 'H':
        {
            int value;
            cin >> value;
            // 新建一个节点并获取其编号
            int new_node_index = new_node(value);
            // // 让这个节点指向head节点原先指向的节点
            // nxt[new_node_index] = nxt[head_index];
            // // 让head指向这个节点
            // nxt[head_index] = new_node_index;
            insert(head_index, new_node_index);
            break;
        }
        case 'I':
        {
            int idx, value;
            cin >> idx >> value;
            insert(idx, new_node(value));
            break;
        }
        case 'D':
        {
            int idx;
            cin >> idx;
            remove(idx);
            break;
        }
        }
    }

    if (nxt[head_index] == -1)
        return 0;
    int current_idx = nxt[head_index];
    while (current_idx != -1)
    {
        cout << num[current_idx] << ' ';
        current_idx = nxt[current_idx];
    }

    return 0;
}